How to use Morphological Analyzer Engine MeCab using Python3

How to use Morphological Analyzer Engine MeCab using Python3

Clock Icon2018.10.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

MeCab is a morphological analyzer engine. We will illustrate how to use MeCab using Python3.

Environment

  • macOS 10.13.6
  • Python 3.6.4

Setting

Install MeCab and dictionary, mecab-python3

$ brew install mecab mecab-ipadic git curl xz
$ pip install mecab-python3

Install mecab-ipadic-NEolog

Since the standard dictionary is not able to handle EC2 and S3 well, we also install the system dictionary mecab-ipadic-NEologd with new words on the web.

For details of the installation method, please check mecab-ipadic-NEologd : Neologism dictionary for MeCab.

$ git clone --depth 1 [email protected]:neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n

We can check the directory path for mecab-ipadic-neologd with the following command.

$ echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
/usr/local/lib/mecab/dic/mecab-ipadic-neologd

How to use

We were able to install so now we will try using morphological analyzer using python3. We will try to analyze the following sentence from Wikipedia.

Amazon Web Services

AWSの有名なサービスにAmazon Elastic Compute Cloud (EC2) とAmazon Simple Storage Service (S3) がある。これまでのクライアントが保有していた物理的なサーバファームと比較してAWSは大規模な計算処理能力を速やかに提供出来ることが強みである。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MeCab

sentence = """AWSの有名なサービスにAmazon Elastic Compute Cloud (EC2) とAmazon Simple Storage Service (S3) がある。
これまでのクライアントが保有していた物理的なサーバファームと比較してAWSは大規模な計算処理能力を速やかに提供出来ることが強みである。"""

t = MeCab.Tagger('')
print(t.parse(sentence))

Execution result

AWS     名詞,固有名詞,組織,*,*,*,*
の      助詞,連体化,*,*,*,*,の,ノ,ノ
有名    名詞,形容動詞語幹,*,*,*,*,有名,ユウメイ,ユーメイ
な      助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
サービス        名詞,サ変接続,*,*,*,*,サービス,サービス,サービス
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
Amazon  名詞,一般,*,*,*,*,*
Elastic 名詞,一般,*,*,*,*,*
Compute 名詞,一般,*,*,*,*,*
Cloud   名詞,一般,*,*,*,*,*
(       名詞,サ変接続,*,*,*,*,*
EC      名詞,一般,*,*,*,*,*
2       名詞,数,*,*,*,*,*
)       名詞,サ変接続,*,*,*,*,*
と      助詞,並立助詞,*,*,*,*,と,ト,ト
Amazon  名詞,固有名詞,組織,*,*,*,*
Simple  名詞,一般,*,*,*,*,*
Storage 名詞,一般,*,*,*,*,*
Service 名詞,一般,*,*,*,*,*
(       名詞,サ変接続,*,*,*,*,*
S       名詞,一般,*,*,*,*,*
3       名詞,数,*,*,*,*,*
)       名詞,サ変接続,*,*,*,*,*
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
ある    動詞,自立,*,*,五段・ラ行,基本形,ある,アル,アル
。      記号,句点,*,*,*,*,。,。,。
これ    名詞,代名詞,一般,*,*,*,これ,コレ,コレ
まで    助詞,副助詞,*,*,*,*,まで,マデ,マデ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
クライアント    名詞,一般,*,*,*,*,*
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
保有    名詞,サ変接続,*,*,*,*,保有,ホユウ,ホユー
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
い      動詞,非自立,*,*,一段,連用形,いる,イ,イ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
物理    名詞,一般,*,*,*,*,物理,ブツリ,ブツリ
的      名詞,接尾,形容動詞語幹,*,*,*,的,テキ,テキ
な      助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
サーバ  名詞,一般,*,*,*,*,サーバ,サーバ,サーバ
ファーム        名詞,一般,*,*,*,*,ファーム,ファーム,ファーム
と      助詞,格助詞,一般,*,*,*,と,ト,ト
比較    名詞,サ変接続,*,*,*,*,比較,ヒカク,ヒカク
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
AWS     名詞,一般,*,*,*,*,*
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
大      接頭詞,名詞接続,*,*,*,*,大,ダイ,ダイ
規模    名詞,一般,*,*,*,*,規模,キボ,キボ
な      助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
計算    名詞,サ変接続,*,*,*,*,計算,ケイサン,ケイサン
処理    名詞,サ変接続,*,*,*,*,処理,ショリ,ショリ
能力    名詞,一般,*,*,*,*,能力,ノウリョク,ノーリョク
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
速やか  名詞,形容動詞語幹,*,*,*,*,速やか,スミヤカ,スミヤカ
に      助詞,副詞化,*,*,*,*,に,ニ,ニ
提供    名詞,サ変接続,*,*,*,*,提供,テイキョウ,テイキョー
出来る  動詞,自立,*,*,一段,基本形,出来る,デキル,デキル
こと    名詞,非自立,一般,*,*,*,こと,コト,コト
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
強み    名詞,一般,*,*,*,*,強み,ツヨミ,ツヨミ
で      助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある    助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
。      記号,句点,*,*,*,*,。,。,。
EOS

We will use mecab-ipadic-NEologd's dictionary because EC2 and S3 were divided like EC and 2, S and 3.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MeCab

sentence = """AWSの有名なサービスにAmazon Elastic Compute Cloud (EC2) とAmazon Simple Storage Service (S3) がある。
これまでのクライアントが保有していた物理的なサーバファームと比較してAWSは大規模な計算処理能力を速やかに提供出来ることが強みである。"""

t = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
print(t.parse(sentence))

Execution result

AWS     名詞,固有名詞,一般,*,*,*,AWS,アマゾンウェブサービス,アマゾンウェブサービス
の      助詞,連体化,*,*,*,*,の,ノ,ノ
有名    名詞,形容動詞語幹,*,*,*,*,有名,ユウメイ,ユーメイ
な      助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
サービス        名詞,サ変接続,*,*,*,*,サービス,サービス,サービス
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
Amazon  名詞,固有名詞,一般,*,*,*,Amazon,アマゾン,アマゾン
Elastic 名詞,固有名詞,一般,*,*,*,Elastic,エラスティック,エラスティック
Compute 名詞,一般,*,*,*,*,*
Cloud   名詞,一般,*,*,*,*,*
(       記号,一般,*,*,*,*,*
EC2     名詞,固有名詞,一般,*,*,*,EC2,イーシーツー,イーシーツー
)       記号,一般,*,*,*,*,*
と      助詞,並立助詞,*,*,*,*,と,ト,ト
Amazon  名詞,固有名詞,一般,*,*,*,Amazon,アマゾン,アマゾン
Simple  名詞,固有名詞,一般,*,*,*,Simple,シンプル,シンプル
Storage 名詞,一般,*,*,*,*,*
Service 名詞,一般,*,*,*,*,*
(       記号,一般,*,*,*,*,*
S3      名詞,固有名詞,人名,一般,*,*,S3,エススリーマイルスボニーアンドブレンクシナトラ,エススリーマイルスボニーアンドブレンクシナトラ
)       記号,一般,*,*,*,*,*
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
ある    動詞,自立,*,*,五段・ラ行,基本形,ある,アル,アル
。      記号,句点,*,*,*,*,。,。,。
これ    名詞,代名詞,一般,*,*,*,これ,コレ,コレ
まで    助詞,副助詞,*,*,*,*,まで,マデ,マデ
の      助詞,連体化,*,*,*,*,の,ノ,ノ
クライアント    名詞,固有名詞,一般,*,*,*,client,クライアント,クライアント
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
保有    名詞,サ変接続,*,*,*,*,保有,ホユウ,ホユー
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
い      動詞,非自立,*,*,一段,連用形,いる,イ,イ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
物理    名詞,一般,*,*,*,*,物理,ブツリ,ブツリ
的      名詞,接尾,形容動詞語幹,*,*,*,的,テキ,テキ
な      助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
サーバファーム  名詞,固有名詞,一般,*,*,*,サーバファーム,サーバファーム,サーバファーム
と      助詞,格助詞,一般,*,*,*,と,ト,ト
比較    名詞,サ変接続,*,*,*,*,比較,ヒカク,ヒカク
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
AWS     名詞,固有名詞,一般,*,*,*,AWS,アマゾンウェブサービス,アマゾンウェブサービス
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
大規模  名詞,一般,*,*,*,*,大規模,ダイキボ,ダイキボ
な      助動詞,*,*,*,特殊・ダ,体言接続,だ,ナ,ナ
計算    名詞,サ変接続,*,*,*,*,計算,ケイサン,ケイサン
処理    名詞,サ変接続,*,*,*,*,処理,ショリ,ショリ
能力    名詞,一般,*,*,*,*,能力,ノウリョク,ノーリョク
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
速やか  名詞,形容動詞語幹,*,*,*,*,速やか,スミヤカ,スミヤカ
に      助詞,副詞化,*,*,*,*,に,ニ,ニ
提供    名詞,サ変接続,*,*,*,*,提供,テイキョウ,テイキョー
出来る  動詞,自立,*,*,一段,基本形,出来る,デキル,デキル
こと    名詞,非自立,一般,*,*,*,こと,コト,コト
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
強み    名詞,一般,*,*,*,*,強み,ツヨミ,ツヨミ
で      助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある    助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
。      記号,句点,*,*,*,*,。,。,。
EOS

This time EC2 and S3 could also be split correctly as nouns. Although it is described mecab-ipadic-NEologd : Neologism dictionary for MeCab, it is good to use mecab-ipadic-NEologd when analyzing documents on the Web.

We could analyze sentences but we want to get only a specific part of speech. We can pick out only nouns as follows.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MeCab

sentence = """AWSの有名なサービスにAmazon Elastic Compute Cloud (EC2) とAmazon Simple Storage Service (S3) がある。
これまでのクライアントが保有していた物理的なサーバファームと比較してAWSは大規模な計算処理能力を速やかに提供出来ることが強みである。"""

t = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
t.parse('')
m = t.parseToNode(sentence)

while m:
    if m.feature.split(',')[0] == '名詞':
        print(m.surface)
    m = m.next

Execution result

AWS      名詞,固有名詞,一般,*,*,*,AWS,アマゾンウェブサービス,アマゾンウェブサービス
有名     名詞,形容動詞語幹,*,*,*,*,有名,ユウメイ,ユーメイ
サービス         名詞,サ変接続,*,*,*,*,サービス,サービス,サービス
Amazon   名詞,固有名詞,一般,*,*,*,Amazon,アマゾン,アマゾン
Elastic          名詞,固有名詞,一般,*,*,*,Elastic,エラスティック,エラスティック
Compute          名詞,一般,*,*,*,*,*
Cloud    名詞,一般,*,*,*,*,*
EC2      名詞,固有名詞,一般,*,*,*,EC2,イーシーツー,イーシーツー
Amazon   名詞,固有名詞,一般,*,*,*,Amazon,アマゾン,アマゾン
Simple   名詞,固有名詞,一般,*,*,*,Simple,シンプル,シンプル
Storage          名詞,一般,*,*,*,*,*
Service          名詞,一般,*,*,*,*,*
S3       名詞,固有名詞,人名,一般,*,*,S3,エススリーマイルスボニーアンドブレンクシナトラ,エススリーマイルスボニーアンドブレンクシナトラ
これ     名詞,代名詞,一般,*,*,*,これ,コレ,コレ
クライアント     名詞,固有名詞,一般,*,*,*,client,クライアント,クライアント
保有     名詞,サ変接続,*,*,*,*,保有,ホユウ,ホユー
物理     名詞,一般,*,*,*,*,物理,ブツリ,ブツリ
的       名詞,接尾,形容動詞語幹,*,*,*,的,テキ,テキ
サーバファーム   名詞,固有名詞,一般,*,*,*,サーバファーム,サーバファーム,サーバファーム
比較     名詞,サ変接続,*,*,*,*,比較,ヒカク,ヒカク
AWS      名詞,固有名詞,一般,*,*,*,AWS,アマゾンウェブサービス,アマゾンウェブサービス
大規模   名詞,一般,*,*,*,*,大規模,ダイキボ,ダイキボ
計算     名詞,サ変接続,*,*,*,*,計算,ケイサン,ケイサン
処理     名詞,サ変接続,*,*,*,*,処理,ショリ,ショリ
能力     名詞,一般,*,*,*,*,能力,ノウリョク,ノーリョク
速やか   名詞,形容動詞語幹,*,*,*,*,速やか,スミヤカ,スミヤカ
提供     名詞,サ変接続,*,*,*,*,提供,テイキョウ,テイキョー
こと     名詞,非自立,一般,*,*,*,こと,コト,コト
強み     名詞,一般,*,*,*,*,強み,ツヨミ,ツヨミ

If you want to retrieve the results in a list, you can write the code as follows.

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MeCab

sentence = """AWSの有名なサービスにAmazon Elastic Compute Cloud (EC2) とAmazon Simple Storage Service (S3) がある。
これまでのクライアントが保有していた物理的なサーバファームと比較してAWSは大規模な計算処理能力を速やかに提供出来ることが強みである。"""

t = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
t.parse('')
m = t.parseToNode(sentence)

keywords = []

while m:
    if m.feature.split(',')[0] == '名詞':
        keywords.append(m.surface)
    m = m.next

print(keywords)

Execution result

['AWS', '有名', 'サービス', 'Amazon', 'Elastic', 'Compute', 'Cloud', 'EC2', 'Amazon', 'Simple', 'Storage', 'Service', 'S3', 'これ', 'クライアント', '保有', '物理', '的', 'サーバファーム', '比較', 'AWS', '大規模', '計算', '処理', '能力', '速やか', '提供', 'こと', '強み']

Tips

This code parsed t.parse('') and empty character in code. If I did not do this, then the following error would occurr.

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe0 in position 0: invalid continuation byte

Conclusion

This time we tried morphological analysis using MeCab. When analyzing documents on the Web, we recommend using the mecab-ipadic-NEologd dictionary.

References

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.